package com.zenithmind.version.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.version.pojo.vo.BranchVO;

import java.util.List;

/**
 * 分支查询服务接口 - 遵循接口隔离原则，专门处理分支查询操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BranchQueryService {

    /**
     * 分页查询分支列表
     * 
     * @param current 当前页
     * @param size 页大小
     * @param repositoryId 仓库ID
     * @param type 分支类型
     * @param status 分支状态
     * @param keyword 关键词
     * @return 分页结果
     */
    PageResult<BranchVO> getBranchPage(Long current, Long size,
                                      String repositoryId, Integer type,
                                      Integer status, String keyword);

    /**
     * 查询仓库的分支列表
     * 
     * @param repositoryId 仓库ID
     * @param type 分支类型
     * @return 分支列表
     */
    List<BranchVO> getRepositoryBranches(String repositoryId, Integer type);

    /**
     * 查询活跃分支列表
     * 
     * @param repositoryId 仓库ID
     * @param limit 限制数量
     * @return 分支列表
     */
    List<BranchVO> getActiveBranches(String repositoryId, Integer limit);

    /**
     * 搜索分支
     *
     * @param repositoryId 仓库ID
     * @param keyword 关键词
     * @param limit 限制数量
     * @return 分支列表
     */
    List<BranchVO> searchBranches(String repositoryId, String keyword, Integer limit);

    /**
     * 获取用户的分支列表
     *
     * @param userId 用户ID
     * @param repositoryId 仓库ID（可选）
     * @param limit 限制数量
     * @return 分支列表
     */
    List<BranchVO> getUserBranches(String userId, String repositoryId, Integer limit);

    /**
     * 获取分支统计信息
     *
     * @param repositoryId 仓库ID
     * @return 统计信息
     */
    Object getBranchStatistics(String repositoryId);

    /**
     * 获取分支的提交列表
     *
     * @param repositoryId 仓库ID
     * @param branchName 分支名称
     * @param limit 限制数量
     * @return 提交列表
     */
    List<Object> getBranchCommits(String repositoryId, String branchName, Integer limit);
}
